"""
JsonSchema使用步骤
1. 导包
2. 创建校验规则
3. 调用验证方法, 传入json数据和校验规则

定义规则:
type: 指定数据的类型  7种类型
properties: 当type是object时, 需要使用该属性, 辅助描述object里面的字段信息
"""

# 1. 导包
import jsonschema

# 准备JSON数据. 因为现在是在Python代码里, bool类型和空, 记得要改成Python的类型
json_data = {
    "success": True,
    "code": 10000,
    "message": "操作成功",
    "money": 6.66,
    "address": None,
    "data": {
        "name": "tom",
        "age": 18
    },
    "luckyNumber": [6, 8, 9]
}


# 2. 创建校验规则
# properties: 单词一定要写对, 否则, 整个整个语法都失效. 为了验证是否写对
# 1. 可以将校验规则: 后面的数据类型故意少个字母, 看看是否报错. 如果类型少字母报错了, 就说明properties写对了
# 2. 将JSON的数据, 故意改错, 看看是否报错. 如果报错, 就说明properties写对了
schema = {
    "type": "object",
    "properties": {
        "success": {"type": "boolean"},
        "code": {"type": "integer"},
        "message": {"type": "string"},
        "money": {"type": "number"},
        "address": {"type": "null"},
        "data": {"type": "object",
                 "properties":{
                     "name" : {"type": "string"},
                     "age" : {"type": "integer"}

                 },
                 "required":["name"]
                 },
        "luckyNumber": {"type": "array"},
    },
    "required":["success","code","message"]
}

# 3. 调用验证方法, 传入json数据和校验规则
# 断言成功, 没有效果. 只有出错, 才会有效果
jsonschema.validate(instance=json_data, schema=schema)